package com.briup.day03;

import java.util.Scanner;
import java.util.StringJoiner;

public class Homework3 {
    public static void main(String[] args) {
        // 请编写一个Java程序，实现输入一个15以内的正整数，
        //对该正整数进行分解质因数，输出该整数与质因数的等式。
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入15以内的正整数:");
        // nextInt()是Scanner扫描类中定义的方法，其解决的就是
        // 从输入源中获取数据，并且将该数据转换为int类型数值的问题
        // 在使用nextInt()方法时，可以使用其另一个单参的方法，
        // 可以指定输入数据解析式使用的进制
        int num = sc.nextInt(16);
        System.out.println("输入的数据为：" + num);
        if (num > 15 || num <= 0) {
            System.out.println("您输入的数字不符合要求！！！");
        }
        StringJoiner expression = new StringJoiner(" * ");
        la:
        for (int i = 1; i <= num; i++) {
            // 1 = 1，2 = 2，3 = 3，4 = 2 * 2，5 = 5
            // 6 = 2 * 3，7 = 7，8 = 2 * 2 * 2....
            if (num % i == 0) {
                // 判断i是否为num的因数
                // 进一步确定i是否为质数
                for (int j = 2; j < Math.sqrt(i); j++) {
                    if (i % j == 0) {
                        // 说明i不是一个质数，说明无需继续在内层循环中执行，即需要跳出内层循环
                        // 在Java中可以使用break关键字跳出循环
                        // break;
                        // 跳过本次外层循环，开始下一次的循环，
                        // 如果要跳过某一次循环，那么只需要使用continue关键字即可
                        i = i / j;
                        continue la;
                    }
                }
                expression.add(i + "");
            }
        }
        System.out.println(num + "=" + expression.toString());
    }

    /*
    在同一个类中，不能存在同名的方法；除非是实现了方法的重载
     方法的重载就是指，在同一个类中，存在方法名相同，但是方法的参数列表不同的情况
     参数列表不同主要体现在方法参数的个数、方法参数的类型不同

     为什么要存在方法的重载？
        对于同一类问题，只是问题的情况和条件不同，导致问题的解决方案存在
        差异，那么需要使用不同的方案进行实现，但是本质上都是解决同一类问题，
        那么我们通常情况下，都会将这类问题的不同解决方案在定义方法时，命名为
        同一个名字
     */
    // 实现两数之和，这里是对于整数类型的求和
    private static int add(int a, int b) {
        return a + b;
    }

    // 实现两数之和，对于浮点数类型的求和
    private static double add(double a, double b) {
        return a + b;
    }
}
